// Copyright (c) 2005  INRIA Sophia-Antipolis (France).
// All rights reserved.
//
// This file is part of cgal-python; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; version 2.1 of the License.
// See the file LICENSE.LGPL distributed with cgal-python.
//
// Licensees holding a valid commercial license may use this file in
// accordance with the commercial license agreement provided with the software.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//
// $Id: Py_Global_variables.cpp 144 2006-07-19 13:29:19Z nmeskini $
// $URL: svn+ssh://scm.gforge.inria.fr/svn/cgal-python/trunk/cgal-python/bindings/Kernel/Py_Global_variables.cpp $
//
// Author(s)     : Naceur Meskini
//=========================================================================

// include ====================================================================
#include <CGAL/basic.h>
#include <include/Kernels.h>

#include <boost/python.hpp>
#include <boost/cstdint.hpp>


//BEGIN ================== Origin_and_Null_vector =======================================

const char * doc_origin = "CGAL defines a symbolic constant ORIGIN which denotes the point at the origin.\n"\
"Origin is the type of this constant. It is used in the conversion between points and vectors.\n.";
void Py_Origin_and_Null_vector()
{
	using namespace boost::python;
    class_< CGAL::Origin >("Origin",doc_origin, init<>())
        .def(init< const CGAL::Origin& >())
    ;
    class_< CGAL::Null_vector >("Null_vector","A symbolic constant used to construct zero length vectors.",init<>())
        .def(init< const CGAL::Null_vector& >())
    ;
}
//END ================== Origin_and_Null_vector =======================================

//BEGIN ================== Global Variabls =======================================
void Py_Global_variables()
{
	using namespace boost::python;

	// ================== Some principals Transformations =======================================

	class_< CGAL::Translation >("Translation","Tag class for affine transformations.",init<  >())
		.def(init< const CGAL::Translation& >())
	;

    class_< CGAL::Rotation >("Rotation", "Tag class for affine transformations.",init<  >())
        .def(init< const CGAL::Rotation& >())
    ;

    class_< CGAL::Scaling >("Scaling","Tag class for affine transformations.", init<  >())
        .def(init< const CGAL::Scaling& >())
    ;

    class_< CGAL::Reflection >("Reflection","Tag class for affine transformations." , init<>())
        .def(init< const CGAL::Reflection& >())
    ;

    class_< CGAL::Identity_transformation >("Identity_transformation","Tag class for affine transformations.", init<  >())
        .def(init< const CGAL::Identity_transformation& >())
    ;

    scope().attr("LEFT_TURN") = CGAL::LEFT_TURN;
    scope().attr("RIGHT_TURN") = CGAL::RIGHT_TURN;
    scope().attr("CLOCKWISE") = CGAL::CLOCKWISE;
    scope().attr("COUNTERCLOCKWISE") = CGAL::COUNTERCLOCKWISE;
    scope().attr("COLLINEAR") = CGAL::COLLINEAR;
    scope().attr("COPLANAR") = CGAL::COPLANAR;
 	scope().attr("DEGENERATE") = CGAL::DEGENERATE;

    scope().attr("TRANSLATION") = CGAL::TRANSLATION;
    scope().attr("ROTATION") = CGAL::ROTATION;
    scope().attr("SCALING") = CGAL::SCALING;
    scope().attr("REFLECTION") = CGAL::REFLECTION;
    scope().attr("IDENTITY") = CGAL::IDENTITY;

    scope().attr("ORIGIN") = CGAL::ORIGIN;
 	scope().attr("NULL_VECTOR") = CGAL::NULL_VECTOR;

}

//END ================== Global Variabls=======================================

void export_Global_variables()
{
	Py_Origin_and_Null_vector();
	Py_Global_variables();
}



